import cv2 as cv
import numpy as np


def extract_object_demo():
    capture = cv.VideoCapture("video/video001.mp4")  # 获取视频
    while True:
        ret, frame = capture.read()
        if ret is False:
            break
        hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
        lower_hsv = np.array([100, 43, 46])  # 蓝色对于的hsv的最小值
        upper_hsv = np.array([124, 255, 255])  # 蓝色对于的hsv的最大值
        mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)  # 得到蓝色区域的图像（黑白）
        dst = cv.bitwise_and(frame, frame, mask=mask)  # 得到蓝色区域的图像（蓝色）
        cv.imshow("video", frame)
        cv.imshow("mask", dst)
        c = cv.waitKey(40)
        if c == 27:
            break


# 色彩空间的转换202
def color_space_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)  # 将RGB转换为灰度图像
    cv.imshow("gray", gray)
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)  # 将RGB模型转换为HSV模型
    cv.imshow("hsv", hsv)
    yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
    cv.imshow("yuv", yuv)
# 在opencv中h表示色调，取值范围是0-180。s表示饱和度，取值范围是0-255。v表示亮度，取值范围是0-255。
# 记住黑、灰、白、红、橙、黄、绿、青、蓝、紫这几种颜色对应的hsv分量取值范围的表


src = cv.imread("imgs/test001.png")
cv.imshow("wangbobo", src)
# color_space_demo(src)
# cv.waitKey(0)
extract_object_demo()

b, g, r = cv.split(src)  # 将RGB分为三个图像
# cv.imshow("blue", b)
# cv.imshow("green", g)
# cv.imshow("red", r)
src[:, :, 2] = 0  # 将最后一个通道（红）赋值为零
cv.imshow("changed_image_1", src)
src = cv.merge([b, g, r])  # 合并三个通道得到一幅图像
cv.imshow("changed_image_2", src)
cv.waitKey(0)

cv.destroyAllWindows()
